package main

import "fmt"

// 抽象产品1：编辑器UI
type EditorUI interface {
	Render() string
}

// 抽象产品2：语法检查器
type SyntaxChecker interface {
	Validate(code string) error
}

// ---------------------- Java开发套件 ----------------------
type JavaEditor struct{}

func (j JavaEditor) Render() string { return "Java主题编辑器" }

type JavaSyntaxChecker struct{}

func (j JavaSyntaxChecker) Validate(code string) error {
	// 伪代码：调用Java编译器API
	return nil
}

// Java工厂（生产配套产品）
type JavaIDEKitFactory struct{}

func (f JavaIDEKitFactory) CreateEditor() EditorUI       { return JavaEditor{} }
func (f JavaIDEKitFactory) CreateChecker() SyntaxChecker { return JavaSyntaxChecker{} }

// ---------------------- Python开发套件 ----------------------
type PythonEditor struct{}

func (p PythonEditor) Render() string { return "Python主题编辑器" }

type PythonSyntaxChecker struct{}

func (p PythonSyntaxChecker) Validate(code string) error {
	// 伪代码：调用PyLint
	return nil
}

// Python工厂
type PythonIDEKitFactory struct{}

func (f PythonIDEKitFactory) CreateEditor() EditorUI       { return PythonEditor{} }
func (f PythonIDEKitFactory) CreateChecker() SyntaxChecker { return PythonSyntaxChecker{} }

// 抽象工厂接口（2个方法）
type IDEKitFactory interface {
	CreateEditor() EditorUI
	CreateChecker() SyntaxChecker
}

// 客户端：创建配套的IDE组件
func BuildIDE(factory IDEKitFactory) {
	editor := factory.CreateEditor()
	checker := factory.CreateChecker()

	fmt.Println(editor.Render())
	_ = checker.Validate("print('Hello')")
}

func main() {
	var factory IDEKitFactory = PythonIDEKitFactory{} // 选择产品族
	BuildIDE(factory)
}
